package com.Hot100;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author zsj
 * @version 1.0
 * @date 2024/4/24 10:34
 * @description
 */
public class DayThree {
//    public static void main(String[] args) {
////        System.out.println(lengthOfLongestSubstring("abcabcbb"));
////        System.out.println(lengthOfLongestSubstring("pwwkew"));
////        System.out.println(lengthOfLongestSubstring("abba"));
////        System.out.println(lengthOfLongestSubstring("dvdf"));
//
//
//    }

    //3. 无重复字符的最长子串
    //给定一个字符串 s ，请你找出其中不含有重复字符的 最长子串的长度。
    public int lengthOfLongestSubstring(String s) {
        Map<Character, Integer> map = new HashMap<>();//存储元素和元素出现的索引
        int left = 0;
        int max = 0;
        char[] charArray = s.toCharArray();
        for (int fast = 0; fast < charArray.length; fast++) {
            if (map.containsKey(charArray[fast])) {
                //如果重复出现
                left = Math.max(map.get(charArray[fast]) + 1, left);//将左指针移动到这个的前一位
            }
            map.put(charArray[fast], fast);
            //收集一次结果
            max = Math.max(fast - left + 1, max);
        }
        return max;
    }



    //438. 找到字符串中所有字母异位词
    public List<Integer> findAnagrams(String s, String p) {
        //维护一个p长度的滑动窗口
        //对s进行扫描 s[i]如果不是p的子串 将索引往后一位
        Map<Character, Integer> map = new HashMap<>();
        char[] chars = p.toCharArray();


        return new ArrayList<>();
    }

    public static int minSubArrayLen(int target, int[] nums) {
        int ans = Integer.MAX_VALUE;
        int l = 0;
        int value = 0;
        for (int e = 0; e < nums.length; e++) {
            value += nums[e];
            while (value - nums[l] >= target) {
                value -= nums[l];
                l++;
            }
            if (value >= target) {
                ans = Math.min(ans, e - l + 1);
            }

        }
        return ans == Integer.MAX_VALUE ? 0 : ans;
    }

    public static void main(String[] args) {
        System.out.println(minSubArrayLen(7, new int[]{2, 3, 1, 2, 4, 3}));
        System.out.println(minSubArrayLen(4, new int[]{1,4,4}));
        System.out.println(minSubArrayLen(11, new int[]{1,1,1,1,1,1,1,1}));
    }
}
